package com.wh.message.redis.service;

import java.util.Set;


/**
 * Readis操作
 * @author 谢泽鹏
 * @version V1.0
 * @Package com.wh.message.jpush.in
 * @date 2014年10月8日 下午4:02:14
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2018
 */
public interface RedisMessageService<T> {

	/**
	 * 删除keys
	 * @param keys 删除keys
	 */
	long del(String... keys);

	/**
	 * 添加key和value (byte)
	 * @param key   添加key
	 * @param value 添加value
	 */
	void set(byte[] key, byte[] value);

	/**
	 * 添加key和value, 并且设置存活时间(byte)
	 * @param key      添加key
	 * @param value    添加value
	 * @param liveTime 存活时间liveTime(单位/秒)
	 * expire  设置生存时间(单位/秒)
	 * pexpire 设置生存时间(单位/毫秒)
	 */
	void set(byte[] key, byte[] value, long liveTime);

	/**
	 * 添加key和value
	 * @param key      添加key
	 * @param value    添加value
	 */
	void set(String key, String value);

	/**
	 * 添加key和value 并且设置存活时间
	 * @param key      添加key
	 * @param value    添加value
	 * @param liveTime 存活时间liveTime(单位秒)
	 * expire  设置生存时间(单位/秒)
	 * pexpire 设置生存时间(单位/毫秒)
	 */
	void set(String key, String value, long liveTime);

	/**
	 * 添加key和object
	 * @param key    添加key
	 * @param object 添加object
	 */
	void set(String key, Object object);

    /**
	 * 添加key和object, 并且设置存活时间
	 * @param key      主键key
	 * @param object   添加object
	 * @param liveTime 存活时间liveTime(单位秒)
	 * expire  设置生存时间(单位/秒)
	 * pexpire 设置生存时间(单位/毫秒)
     */
	void set(String key, Object object, long liveTime);

	/**
	 * 添加key和value (byte高并发)
	 * @param key      添加key
	 * @param value    添加value
	 */
	Boolean setNX(byte[] key, byte[] value);

	/**
	 * 添加key和value, 并且设置存活时间(byte高并发)
	 * @param key      添加key
	 * @param value    添加value
	 * @param liveTime 存活时间liveTime(单位秒)
	 * expire  设置生存时间(单位/秒)
	 * pexpire 设置生存时间(单位/毫秒)
	 */
	Boolean setNX(byte[] key, byte[] value, long liveTime);

	/**
	 * 获取key
	 * @param key  获取key
	 * @return
	 */
	String get(String key);


    /**
     * 获取key对应T
     * @param key   获取key
     * @param cls   对应class
     * @return
     */
	T getObject(String key, Class<T> cls);

	/**
	 * 通过正则获取配置所有key的Set集合
	 * @param pattern 正则表达式
	 * @return
	 */
	Set<?> keys(String pattern);

	/**
	 * 检查key是否存在
	 * @param key  检查key
	 * @return
	 */
	boolean exists(String key);

	/**
	 * 清空redisDB
	 * @return
	 */
	String clearDB();

	/**
	 * 获取readisDB大小
	 * @return
	 */
	long dbSize();

	/**
	 * 判断链接是否成功
	 * @return PONG
	 */
	String ping();
}
